﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Intelsi.Entity;
using Microsoft.Practices.Unity;

namespace Intelsi.DataAcces
{
   public class DevolucionDAO:MasterDataAccess,IDevolucionDAO
        
    {

        [Dependency]
        public IDetalleDevolucionDAO detalleDevolucionDAO { get; set; }
        

        public void RegistarDevolucion(DevolucionDTO Devolucion)
        {
            Intelsi.Entity.Devolucion devolucion = new Devolucion();


            devolucion.IdPedido = Devolucion.IdPedido;
            devolucion.FechaDevolucion = Devolucion.FechaDevolucion;
            devolucion.IdSuperviisor = Devolucion.IdSupervisor;
            devolucion.IdAlmacenero = Devolucion.IdAlmacenero;
            devolucion.Comentario = Devolucion.Cometario;

            foreach (var item in Devolucion.DetalleDevolucion)
            {
                var detadevolucion = new DetalleDevolucion();

                detadevolucion.IdProducto = item.IdProducto;
                detadevolucion.Cantidad = item.CantidadEntregada;
                detadevolucion.Estado = item.estado;
                detadevolucion.Comentario = item.comentario;

                devolucion.DetalleDevolucions.Add(detadevolucion);


            }

            Context.Devolucions.Add(devolucion);
            Context.SaveChanges();



        }






        public List<DevolucionDTO> GetFromDevolucionByCriterio(string criterio)
        {
            var query = from de in Context.Devolucions
                        //where de.IdDevolucion.Equals(IdDevolucion)

                       
                        join t in Context.Trabajadors on de.IdSuperviisor equals t.IdTrabajador
                        join p in Context.Pedidoes on de.IdPedido equals p.IdPedido
                        join pro in Context.Proyectoes on p.IdProyecto equals pro.IdProyecto

                        where (de.Trabajador.Ape_Nomb.ToUpper().StartsWith(criterio.ToUpper()) ||
                              de.Trabajador.Ape_Nomb.ToUpper().Contains(criterio.ToUpper()) ||
                              de.Trabajador1.Ape_Nomb.ToUpper().StartsWith(criterio.ToUpper()) ||
                              de.Trabajador1.Ape_Nomb.ToUpper().Contains(criterio.ToUpper()))||
                              (p.Proyecto.Descripcion.ToUpper().Contains(criterio.ToUpper())||
                              (p.Proyecto.Descripcion.ToUpper().Contains(criterio.ToUpper())))

                        select new DevolucionDTO
                        {
                            IdDevolucion = de.IdDevolucion,
                            FechaDevolucion = de.FechaDevolucion,

                            IdProyecto = pro.IdProyecto,
                            Descripcion = pro.Descripcion,
                            ordenServicio = pro.OrdenServicio,
                            empresa = pro.Empresa,


                            IdSupervisor = p.Trabajador.IdTrabajador,
                            NombreSuper = p.Trabajador.Ape_Nomb,
                            celularSuper = p.Trabajador.Celular,
                            dniSuper = p.Trabajador.DNI,
                            numFotochSuper = p.Trabajador.NumFotocheck,

                            IdAlmacenero = de.Trabajador1.IdTrabajador,
                            NombreAlmac = de.Trabajador1.Ape_Nomb,
                            celularEntre = de.Trabajador1.Celular,
                            dniEntre = de.Trabajador1.Celular,


                        };

            
            return query.ToList();
          
        }


        public DevolucionDTO GetFromDevolucionByIdDevolucion(int idDevolucion)
        {
            var query = from de in Context.Devolucions
                       where de.IdDevolucion.Equals(idDevolucion)

                       
                        join t in Context.Trabajadors on de.IdSuperviisor equals t.IdTrabajador
                        join p in Context.Pedidoes on de.IdPedido equals p.IdPedido
                        join pro in Context.Proyectoes on p.IdProyecto equals pro.IdProyecto

                        select new DevolucionDTO
                        {
                            IdDevolucion = de.IdDevolucion,
                            FechaDevolucion = de.FechaDevolucion,

                            IdProyecto = pro.IdProyecto,
                            Descripcion = pro.Descripcion,
                            ordenServicio = pro.OrdenServicio,
                            empresa = pro.Empresa,


                            IdSupervisor = p.Trabajador.IdTrabajador,
                            NombreSuper = p.Trabajador.Ape_Nomb,
                            celularSuper = p.Trabajador.Celular,
                            dniSuper = p.Trabajador.DNI,
                            numFotochSuper = p.Trabajador.NumFotocheck,

                            IdAlmacenero = de.Trabajador1.IdTrabajador,
                            NombreAlmac = de.Trabajador1.Ape_Nomb,
                            celularEntre = de.Trabajador1.Celular,
                            dniEntre = de.Trabajador1.Celular,


                        };

            var devolucion = query.SingleOrDefault();

            if (devolucion != null)
            {
                devolucion.DetalleDevolucion = detalleDevolucionDAO.GetFromDetalleDevolucionByIdDevolucion(devolucion.IdDevolucion);
            }
            return devolucion;
          
        
        }
    }
}
